<?php

/**
 * Description of EncheresController
 *
 * @author FFOZEU
 */
namespace Applications\Modules\Encheres\Backend\Controller;

if( !defined('IN') ) die('Hacking Attempt');

use Library\BackController;
use Library\HttpRequest;
use Library\Classe\Form\Form;
use Library\Tools;

class EncheresController extends BackController{
    //put your code here
    
    private function leftcolumn(){
        $out = array();
        $out['encheres.html']= 'Liste des enchères';
        $out['add-encheres.html']= 'Créer une enchère';
        $out['encheres-a-une.html']= 'A la une';
        $out['encheres-en-cours.html']= 'En cours';
        $out['encheres-a-venir.html']= 'A venir';
        $out['encheres-terminee.html']= 'Terminées';
        
        return $this->page->addVar('left_content', $out);
        
    }
    
    private function rightcolumn(){
        $out ='Gérez vos enchères. Vous pouvez éditer ou supprimer une enchère.';
        return $this->page->addVar('right_content', $out);
    }
    
    /**
     * listing des enchères
     */
    public function executeEncheres(){
        $this->leftcolumn();
        $this->rightcolumn();
        
        $this->page->addVar('title', 'Liste des enchères');
        
        $manager = $this->managers->getManagerOf('Encheres');
        
        $datalist = $manager->getEncheres();
        
        $this->page->addVar('datalist', $datalist);
    }
    /**
     *On génére l'encheres avenir
     * @param HttpRequest $request 
     */
    public function executeEnchereBecome(HttpRequest $request){
        // On ajoute une définition pour le titre
        $this->leftcolumn();
        $this->rightcolumn();
        $this->page->addVar('title', 'Enchères à venir');
        
        $manager = $this->managers->getManagerOf('Encheres');
        
        $datalist = $manager->getEncheresAvenir();
        
        $this->page->addVar('datalist', $datalist);
    }
    
    /**
     *On génére l'encheres terminée
     * @param HttpRequest $request 
     */
    public function executeEnchereFinish(HttpRequest $request){
        // On ajoute une définition pour le titre
        $this->leftcolumn();
        $this->rightcolumn();
        $this->page->addVar('title', 'Enchères Terminées');
        
        $manager = $this->managers->getManagerOf('Encheres');
        if($request->isXmlHttpRequest()){
            $arraydata =array();
            $arraydata['sent'] = 1;
            //$arraydata['dateFin'] = date('Y-m-d H:i:s');
            $email = $request->postData('email');
            $manager->updateRecord($manager->getNameTable(),$arraydata,$request->postData('idprod'));
            //$this->sendMail($arraydata);
            
        }
        $datalist = $manager->getEncheresTerminees();
        
        $this->page->addVar('datalist', $datalist);
    }
    
    public function executeEnchereUne(HttpRequest $request){
        // On ajoute une définition pour le titre
        $this->leftcolumn();
        $this->rightcolumn();
        
        $this->page->addVar('title', 'Enchères à la une');
        $manager = $this->managers->getManagerOf('Encheres');
        
        $datalist = $manager->getEnchereUne();
        $this->page->addVar('datalist', $datalist);
    }
    
    public function executeEnchereEnCours(HttpRequest $request){
        // On ajoute une définition pour le titre
        $this->leftcolumn();
        $this->rightcolumn();
        
        $this->page->addVar('title', 'Enchères en cours');
        $manager = $this->managers->getManagerOf('Encheres');
        
        $datalist = $manager->getEnchereEnCours();
        $this->page->addVar('datalist', $datalist);
    }
    
    public function executeCreate(HttpRequest $request){
        // On ajoute une définition pour le titre
        $this->page->addVar('title', 'ajouter une enchère');
        
        $this->leftcolumn();
        $this->rightcolumn();
        
        $manager = $this->managers->getManagerOf('Encheres');
        $dataForm = new Form('addEnchere');
        
        $dataForm->add('Text', 'nom')
                ->label('Nom')    
                ->required(true)
                ;
        $dataForm->add('Text', 'prix')
                ->label('Prix')   
                ->required(true)
                ;
        $dataForm->add('Text', 'duree')
                ->label('Durée')    
                ->required(true)
                ;
        $dataForm->add('Text', 'reserve')
                ->label('Réserve')                
                ;
        $dataForm->add('Text', 'limite')
                ->label('Limite')                
                ;
        
        $dataForm->add('Select', 'retime')
                ->label('Retime')
                ->choices(array(
                    '20' => '20s',
                    '30' => '30s',
                    '40' => '40s',
                    '60' => '1mn',
                    '120' => '2mn',
                    '300' => '5mn',
                 ))
                ->required(true);
        $dataForm->add('Radio', 'une')
                ->label('A la une')
                ->add_class('radio-elt')
                ->choices(array(
                    '0' => 'Non',
                    '1' => 'Oui',
                ))
                ->add_br_tag(true)
                ;
        $dataForm->add('Radio', 'robots')
                ->label('Robots')
                ->add_class('radio-elt')
                ->choices(array(
                    '0' => 'Non',
                    '1' => 'Oui',
                ))
                ->add_br_tag(true)
                ;
        $dataForm->add('Radio', 'autoEnchere')
                ->label('Auto enchère')
                ->add_class('radio-elt')
                ->choices(array(
                    '0' => 'Non',
                    '1' => 'Oui',
                ))
                ->add_br_tag(true)
                ;
//        $dataForm->add('Date', 'dateDebut')
//                ->label('Date début')
//                ->required(false)
//                ;        
        $dataForm->add('Textarea', 'description')
                ->label('Description')
                ->required(false)
                ->add_class('field_text')
                ;
        $this->completeForm($request, $manager, $dataForm);
        if($request->getMethod('post')){
            //test de la validation du post
            //$dateheure = explode(' ',str_replace('/','-', $_POST['dateDebut']));
            //$dateheure = explode(' ',str_replace('-','-', $_POST['dateDebut']));
            //$_POST['dateDebut'] = array_shift($dateheure);
            if ($dataForm->is_valid($_POST)) {
                /**
                 *traitement avant l'enregistrement 
                 */
                $_POST['dateDebut'] = date('d-m-Y H:i:s');
                $tab = explode('-', $_POST['dateDebut']);
                $_POST['dateFin'] = date('Y-m-d H:i:s',  time()+intval($_POST['duree'])+3600*24*365);//mktime(date('H'),date('i'),date('s'),date('n'),date('j'),date('Y')+1) +  intval($_POST['duree']);
                
                krsort($tab);
                $_POST['dateDebut'] = implode('-', $tab).' '.(!empty($dateheure)?array_shift($dateheure):'00:00:00');
                $tabimg ='';
                for ($index = 0; $index < 5; $index++) {
                    if(isset($_POST['image'.$index])){
                        $tabimg .= (string)$_POST['image'.$index].';';
                    }elseif(!empty($_FILES['image'.$index]['tmp_name'])){
                        $tabimg .= $this->addImage('image'.$index).';';
                    }
                }
                $_POST['images'] =$tabimg;
                /**
                 *enregistrement ou mise à jour 
                 */
                if(!$request->getExists('id')){
                    if($manager->addEnchere($_POST)){
                        $this->app()->httpResponse()->redirect('encheres.html');
                    }else{
                        $this->errors = 'Echec lors de l\'enregistrement';
                    }
                }else{
                    if($manager->updateEnchere($_POST)){
                        $this->app()->httpResponse()->redirect('encheres.html');
                    }else{
                        $this->errors = 'Echec lors de la mise à jour';
                    }
                }
            }else{
               // die('ici');
                $dataForm->bound($_POST);
            }
        }else{
        }
          
        $this->page->addVar('errors', $this->errors);
        $this->page->addVar('dataForm', $dataForm);  
    }
    
    /**
     * verifie et genere la suite du formualires 
     */
    private function completeForm(HttpRequest $request, $manager, $dataForm){
        if($request->getExists('id')){
            $dataArray = array();
            $dataObjt = $manager->getEnchereById(intval($request->getData('id')));
            $dataArray['nom'] = $dataObjt[0]->getNom();
            $dataArray['prix'] = $dataObjt[0]->getPrix();
            $dataArray['duree'] = $dataObjt[0]->getDuree();
            $dataArray['reserve'] = $dataObjt[0]->getReserve();
            $dataArray['limite'] = $dataObjt[0]->getLimite();
            //gestion affichage de la date
            $dateheure = explode(' ',str_replace('/','-', $dataObjt[0]->getDateDebut()));
            $dateD = array_shift($dateheure);
            $tab = explode('-', $dateD);
            krsort($tab);
            $dataArray['dateDebut'] = implode('-', $tab).' '.(!empty($dateheure)?array_shift($dateheure):'00:00:00') ;
            $dataArray['retime'] = $dataObjt[0]->getRetime();
            $dataArray['une'] = $dataObjt[0]->getUne();
            $dataArray['description'] = html_entity_decode($dataObjt[0]->getDescription());
            $tabimg = explode(';', $dataObjt[0]->getImages());
            array_pop($tabimg);
            $i=0;
            foreach ($tabimg as $value) {
                $dataForm->add('Hidden', 'image'.$i)->value((string)$value);
                $i++;
            }
            for ($index = $i; $index < 5; $index++) {
                $j=$index+1;
                $dataForm->add('File', 'image'.$index)    
                            ->label('Image '.$j)
                            ->required(false)
                            ;
            }
            $dataForm->add('Hidden', 'id')->value($request->getData('id'));
            $this->page->addVar('title', 'Modifier une enchère');
            $this->page->addVar('tabimg', $tabimg);
            $this->page->addVar('idelt', $request->getData('id'));
            $dataForm->add('Submit', 'submit')->value('Modifier');

            $dataForm->bound($dataArray);
        }else{
            for ($index = 0; $index < 5; $index++) {
                 $j=$index+1;
                $dataForm->add('File', 'image'.$index)    
                            ->label('Image '.$j)
                            ->required(false)
                            ;
            }
            $dataForm->add('Submit', 'submit')->value('Ajouter');
            $dataForm->bound($_POST);
        }
    }
    
    public function executeDelete(HttpRequest $request){
        
        $manager = $this->managers->getManagerOf('Encheres');
        if($request->getExists('id')){
            $out['id'] = $request->getData('id');
            if($manager->deleteEncheres($out)){
                $this->errors = 'suppression réussie';
            }else{
                $this->errors = 'Echec lors de la suppression';
            }
            $this->app()->httpResponse()->redirect('encheres.html');
            
        }
    }
    /**
	 * Add or update a banner image
	 *
	 * @param array add image
	 */
	public function addImage($image)
	{


        if(empty($_FILES[$image]['tmp_name'])) return false ;

		$dossier = _SITE_UPLOAD_DIR_.'/encheres/';
		$fichier = basename($_FILES[$image]['name']);
        $path_parts = pathinfo($_FILES[$image]['tmp_name']);
        $filename = $path_parts['filename'];
		$taille_maxi = 100000;
		$taille = filesize($_FILES[$image]['tmp_name']);
		$extensions = array('.GIF','.JPEG','.JPG','.PNG','.png', '.gif', '.jpg', '.jpeg');
		$extension = strrchr($_FILES[$image]['name'], '.');
		//Début des vérifications de sécurité...
		if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
		{
			 $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg';
		}
		if($taille>$taille_maxi)
		{
			// $erreur = 'Le fichier est trop gros...';
		}
		if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
		{
			 //On formate le nom du fichier ici...
			 $fichier = strtr($fichier, 
				  'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
				  'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
			 $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $filename.time().$extension);
			 if(move_uploaded_file($_FILES[$image]['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que �a a fonctionné...
			 {
				  //echo 'Upload effectué avec succès !';
                 $newTools = new Tools();
                 $tabArrayVal = $newTools->getArrayWidthHeight();
                 foreach ($tabArrayVal as $key => $value) {
                     $newTools->imageResize($dossier . $fichier, $dossier . $key.$fichier, $value, $value);
                 }
                 return $fichier ;
			 }
			 else //Sinon (la fonction renvoie FALSE).
			 {
				  echo 'Echec de l\'upload !';
                  return false ;
			 }
		}
		else
		{
			 echo $erreur;
		}
	}
    /**
     * suppression des images d'une enchère
     * @param HttpRequest $request 
     */
    public function executeDeleteImage(HttpRequest $request){
        if($request->getExists('id')&& $request->getExists('imagedel')){
            $manager = $this->managers->getManagerOf('Encheres');
            $dataObjt = $manager->getEnchereById(intval($request->getData('id')));
            $tabimg = explode(';', $dataObjt[0]->getImages());
            $imageDel = $request->getData('imagedel');
            if(is_array($tabimg) && in_array($imageDel, $tabimg)){
                foreach($tabimg as $key => $value){
                    if($value==$imageDel)
                        unset($tabimg[$key]);
                }   
            }
            $tabimg = implode(';', $tabimg);
            $param = array('images'=>$tabimg);
            $newTools = new Tools();
            $tabArrayVal = $newTools->getArrayWidthHeight();
            if($manager->updateRecord($manager->getNameTable(),$param,intval($request->getData('id')))){
                //on supprime physiquement les fichiers maintenant après que le mise à jour ai aboutie
                $dossier = _SITE_UPLOAD_DIR_.'/encheres/';
                foreach ($tabArrayVal as $key => $value) {
                    $newTools->deleteFile($key.$imageDel, $dossier);
                }
                $this->page->addVar('infos','fichier supprimer');
                $this->app()->httpResponse()->redirect($request->refferer());
            }
        }else{
             $this->app()->httpResponse()->redirect('encheres.html');
        }
        
    }
    
    
}

?>
